﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Reflection;

using Microsoft.Practices.ServiceLocation;

namespace Happy.Bootstrap
{
    /// <summary>
    /// 程序引导服务接口，负责引导程序的启动。
    /// </summary>
    public interface IBootstrapService
    {
        /// <summary>
        /// 使用的服务容器。
        /// </summary>
        IServiceLocator ServiceLocator { get; }

        /// <summary>
        /// 添加程序集过滤器，符合过滤器规则的程序集才会被<see cref="IBootstrapPlugin"/>处理。
        /// </summary>
        IBootstrapService Include(Predicate<Assembly> filter);

        /// <summary>
        /// 添加<see cref="IBootstrapPlugin"/>，可以使用多个<see cref="IBootstrapPlugin"/>，必须在启动前调用此方法。
        /// </summary>
        IBootstrapService AddPlugin(IBootstrapPlugin plugin);

        /// <summary>
        /// 使用<see cref="IServiceLocator"/>，只能使用一个<see cref="IServiceLocator"/>，必须在启动前调用此方法。
        /// </summary>
        IBootstrapService UseServiceLocator(IServiceLocator serviceLocator);

        /// <summary>
        /// 启动引导程序，必须在启动前调用此方法。
        /// </summary>
        void Start();
    }
}
